const express = require('express');
const cors = require('cors');
const dotenv = require('dotenv');
const path = require('path');

// 加载环境变量 - 指定.env文件的绝对路径
dotenv.config({ path: path.resolve(__dirname, '../.env') });

// 输出环境变量加载状态（调试用）
console.log('环境变量加载状态：', {
  DB_HOST: process.env.DB_HOST,
  DB_USER: process.env.DB_USER,
  DB_NAME: process.env.DB_NAME,
  DB_PORT: process.env.DB_PORT,
  PORT: process.env.PORT
});

const { testConnection, initDatabase } = require('./config/db');
const authRoutes = require('./routes/authRoutes');

// 创建Express应用
const app = express();
const PORT = process.env.PORT || 3310;

// 中间件
app.use(cors()); // 允许跨域请求
app.use(express.json()); // 解析JSON请求体
app.use(express.urlencoded({ extended: true })); // 解析URL编码请求体

// 路由
app.use('/api/auth', authRoutes);

// 根路由，服务健康检查
app.get('/', (req, res) => {
  res.json({ 
    message: '登录认证API服务正常运行',
    status: 'ok',
    timestamp: new Date().toISOString() 
  });
});

// 404错误处理
app.use((req, res) => {
  res.status(404).json({ 
    success: false, 
    message: '请求的资源不存在' 
  });
});

// 全局错误处理
app.use((err, req, res, next) => {
  console.error('服务器错误:', err);
  res.status(500).json({ 
    success: false, 
    message: '服务器内部错误'
  });
});

// 启动服务器
const startServer = async () => {
  try {
    // 测试数据库连接
    const isConnected = await testConnection();
    if (!isConnected) {
      console.error('无法连接到数据库，服务器启动失败。');
      process.exit(1);
    }

    // 初始化数据库表
    await initDatabase();

    // 启动HTTP服务器
    app.listen(PORT, () => {
      console.log(`服务器已启动，监听端口 ${PORT}`);
      console.log(`接口: http://localhost:${PORT}/api/auth`);
    });
  } catch (error) {
    console.error('服务器启动错误:', error);
    process.exit(1);
  }
};

// 启动服务器
startServer(); 